const fs = require("fs");
const path = require("path");

removeFileOrEmptyDir("./testToDel").then(()=>{
    console.log("成功");
})

// 异步地删除文件或空目录
function removeFileOrEmptyDir(p) {
  return new Promise((resolve, reject) => {
    fs.stat(p, (err, stats) => {
      if (err) {
        reject(err);
      } else {
        if (stats.isFile()) {
          // 如果是文件，则直接删除
          fs.unlink(p, (err) => {
            if (err) {
              reject(err);
            } else {
              resolve();
            }
          });
        } else if (stats.isDirectory()) {
          // 如果是目录
          fs.readdir(p, (err, files) => {
            if (err) {
              reject(err);
            } else if (files.length === 0) {
              // 如果是空目录，则直接删除
              fs.rmdir(p, (err) => {
                if (err) {
                  reject(err);
                } else {
                  resolve();
                }
              });
            } else {
              // 如果是非空目录，递归删除其下所有文件和子目录
              const promises = files.map((file) => {
                const childPath = path.join(p, file);
                return removeFileOrEmptyDir(childPath);
              });
              Promise.all(promises)
                .then(() => {
                  fs.rmdir(p, (err) => {
                    if (err) {
                      reject(err);
                    } else {
                      resolve();
                    }
                  });
                })
                .catch((err) => {
                  reject(err);
                });
            }
          });
        }
      }
    });
  });
}
